/**
* mpsvr的配置
* @author thinkry
*/

#ifndef __MPSVR_CONFIG_H__
#define __MPSVR_CONFIG_H__

#include "mpdef.h"

using namespace CTLib;

/**
* mpsvr的配置
*/
class CMpConfig
{
public:
    // ShmQueue的配置
    char	FrontEndShmKey[CT_PATH_MAX];        ///< 前端共享内存的Key
    int     FrontEndShmSize;   ///< 前端共享内存的大小(这里是共享内存的总大小，单向队列的大小是1/2)
    char    FrontEndSocket[CT_PATH_MAX];    ///< 前端ENP的UnixSocketFile
    char    BackEndSocket[CT_PATH_MAX];     ///< 后端的UnixSocketFile

    // 子进程相关的配置
    char	ProcessSocket[CT_PATH_MAX]; ///< 父子进程间的UnixSocketFile
    int     ProcessNum;                     ///< 子进程个数
    int     ProcessRecvSize;                ///< 子进程接收缓冲区大小
    int     ProcessSendSize;                ///< 子进程发送缓冲区大小
    int     ProcessLoopNum;                 ///< 子进程的循环次数
    int     ProcessTimeOut;                 ///< 子进程的最大阻塞时长(一次处理必须要在此时间内完成)，单位秒

    // 日志配置
    //int     LogFileNum;     ///< 日志文件的个数
    //int     LogFileSize;    ///< 日志文件的大小
    //int     LogFormat;      ///< 日志文件的格式
    //int     LogLevel;       ///< 日志文件的级别

    //int     CoreDump;       ///< Core时是否Dump

    /*
    char    DBHost[CT_PATH_MAX];
    char    DBUser[CT_PATH_MAX];
    char    DBPass[CT_PATH_MAX];
    unsigned short DBPort;
    char    DBSocket[CT_PATH_MAX];
    */

	char    SoFile[CT_PATH_MAX];
	char	SoConfigFile[CT_PATH_MAX];

public:
    /** 加载配置文件 */
    void LoadConfig();

    /** 重读配置文件 */
    void ReloadConfig();

    /** 读取日志配置 */
    void LoadLogConfig();

protected:
    void Ftok(char* pszPathName, size_t iLen);
};

/** 全局配置 */
#define CONF    (CTLib::CTSingleton<CMpConfig, 0>::Instance())

#endif //__MPSVR_CONFIG_H__
